package com.woniuxy.controller;

import com.woniuxy.entity.Residents;
import com.woniuxy.service.ResidentsService;
import com.woniuxy.util.ResponseUtil;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 居民信息控制器类
 * 提供居民信息的增删改查等操作接口
 */
@RestController
@RequestMapping("/residents")
public class ResidentsController {
    @Resource
    private ResidentsService residentsService;

    /**
     * 查询所有居民信息
     * @return 返回所有居民信息的响应结果
     */
    @PostMapping("/show/{pageNum}/{pageSize}")
    public ResponseUtil queryAllShow(@PathVariable("pageNum")Integer pageNum, @PathVariable("pageSize") Integer pageSize){
        return residentsService.queryAllShow(pageNum, pageSize);
    }

    /**
     * 根据居民ID查询居民信息
     * @param residentId 居民ID
     * @return 返回指定居民ID的居民信息的响应结果
     */
    @PostMapping("/queryByResidentId/{residentId}")
    public ResponseUtil queryByResidentId(@PathVariable("residentId") Integer residentId){
        return residentsService.queryByResidentId(residentId);
    }
    
    /**
     * 根据居民ID更新居民信息（删除操作）
     * @param residentId 居民ID
     * @return 返回更新居民信息的响应结果
     */
    @PostMapping("/updateForDelete/{residentId}")
    public ResponseUtil updateForDelete(@PathVariable("residentId") Integer residentId){
        return residentsService.updateForDelete(residentId);
    }
    
    /**
     * 更新居民信息
     * @param residents 居民信息对象
     * @return 返回更新居民信息的响应结果
     */
    @PostMapping("/update")
    public ResponseUtil update(@RequestBody Residents residents){
        return residentsService.update(residents);
    }
    
    /**
     * 根据居民ID查询居民详细信息
     * @param residentId 居民ID
     * @return 返回指定居民ID的详细信息的响应结果
     */
    @PostMapping("/queryAllDetails/{residentId}")
    public ResponseUtil queryAllDetails(@PathVariable("residentId") Integer residentId){
        return residentsService.queryAllDetails(residentId);
    }
    
    /**
     * 根据居民ID查询最近一次的居民信息
     * @param residentId 居民ID
     * @return 返回指定居民ID的最近一次信息的响应结果
     */
    @PostMapping("/queryRecentOne/{residentId}")
    public ResponseUtil queryRecentOne(@PathVariable("residentId") Integer residentId){
        return residentsService.queryRecentOne(residentId);
    }

    /**
     * 根据类型查询健康历史记录
     * @param residentId 居民ID
     * @param type 健康指标类型
     * @return 返回指定类型的健康历史记录
     */
    @GetMapping("/health-history/{residentId}")
    public ResponseUtil getHealthHistoryByType(@PathVariable Integer residentId, @RequestParam String type) {
        return residentsService.getHealthHistoryByType(residentId, type);
    }
    
    /**
     * 根据登录ID查询居民信息
     * @param loginId 登录ID
     * @return 返回指定登录ID的居民信息的响应结果
     */
    @GetMapping("/queryById/{loginId}")
    public ResponseUtil queryById(@PathVariable("loginId") Integer loginId){
        return residentsService.queryById(loginId);
    }

    /**
     * 修改居民信息
     * @param resident 修改的居民信息
     * @return 修改结果
     * */
    @PutMapping("/updateInfo")
    public ResponseUtil updateResident(@RequestBody Residents resident){
        return residentsService.updateResident(resident);
    }

    /**
     * 根据居民ID查询服务团队的成员
     * @param residentId 居民ID
     * @return 返回该居民所属服务团队的成员列表
     */
    @GetMapping("/service-team-members/{residentId}")
    public ResponseUtil queryServiceTeamMembersByResidentId(@PathVariable("residentId") Integer residentId){
        return residentsService.queryServiceTeamMembersByResidentId(residentId);
    }

    /**
     * 通过医生ID查询医生所在团队管理的所有患者
     * @param doctorId 医生ID
     * @return 居民列表
     */
    @GetMapping("/by-doctor/{doctorId}")
    public ResponseUtil queryResidentsByDoctorId(@PathVariable("doctorId") Integer doctorId){
        return residentsService.queryResidentsByDoctorId(doctorId);
    }
}
